import Vue from 'vue'

import 'normalize.css/normalize.css' // A modern alternative to CSS resets

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import locale from 'element-ui/lib/locale/lang/en' // lang i18n

import '@/styles/index.scss' // global css

import App from './App'
import store from './store'
import router from './router'

import '@/icons' // icon
import '@/permission' // permission control
import Print from 'vue-print-nb'
Vue.use(Print)

import * as directives from '@/directives/index'
import * as filters from '@/filters'

import pageTools from '@/components/pageTools'
Vue.component('pageTools', pageTools)
import UploadExcel from '@/components/UploadExcel'
Vue.component('UploadExcel', UploadExcel)
// 全局注册组件
import zujian from '@/components'
Vue.use(zujian)

// 自定义插件  plugin里面会暴露一个install（vue,option）方法出来 必须是install
// import plugin from '@/plugin'
// Vue.use(plugin, '我是option')

// 自定义指令
// Vue.directive('detail', {
//   inserted(dom, option) {
//     dom.onerror = () => {
//       dom.src = option.value.src
//     }
//   }
// })
// console.log(directives)  //所有对象
// console.log(Object.keys(directives))
Object.keys(directives).forEach(key => {
  Vue.directive(key, directives[key])
})

// 注册过滤器
// 处理数据复用-》封装过滤器
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
})

// 混入 mixin
// 写的选项，所有组件都可以使用。组件内的高于混入
// 优点：组件内的逻辑复用
// 缺点：
//    1.来源不清晰
//    2.混入里的生命周期全局执行-->影响执行
// Vue.mixin({
//   data() {
//     return {
//       cc: '123'
//     }
//   },
//   created() {
//     console.log('created')
//   },
//   methods: {
//     abc() {
//       console.log('adc')
//     }
//   }
// })
Vue.use(ElementUI, { locale })

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
